using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._ParcelTools
{
    /// <summary>
    /// <para>Import Parcel Fabric Points</para>
    /// <para>Imports point data from a source point feature class into the parcel fabric points feature class. Parcel fabric points that match or lie within a proximity tolerance of the source points will be updated with the imported point data. If the source points layer has a selection, only the selected point information will be imported.</para>
    /// <para>将点数据从源点要素类导入宗地结构点要素类。与源点的邻近容差匹配或位于邻近容差范围内的宗地结构点将使用导入的点数据进行更新。如果源点图层具有选择，则仅导入所选点信息。</para>
    /// </summary>    
    [DisplayName("Import Parcel Fabric Points")]
    public class ImportParcelFabricPoints : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ImportParcelFabricPoints()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_source_points">
        /// <para>Source Points</para>
        /// <para>The source point feature class that will be used to update points in the target parcel fabric.</para>
        /// <para>将用于更新目标宗地结构中的点的源点要素类。</para>
        /// </param>
        /// <param name="_target_parcel_fabric">
        /// <para>Target Parcel Fabric</para>
        /// <para>The target parcel fabric containing the points that will be updated. The target parcel fabric can be from a file geodatabase, an enterprise geodatabase connected to the default version, or a feature service.</para>
        /// <para>包含将要更新的点的目标宗地结构。目标宗地结构可以来自文件地理数据库、连接到默认版本的企业级地理数据库或要素服务。</para>
        /// </param>
        /// <param name="_match_point_method">
        /// <para>Match Point Method</para>
        /// <para><xdoc>
        ///   <para>Specifies the method that will be used to find parcel fabric points that match the source points.</para>
        ///   <bulletList>
        ///     <bullet_item>Proximity—Parcel fabric points that lie within the proximity tolerance of the source points will be matched to the source points and updated. This is the default.</bullet_item><para/>
        ///     <bullet_item>Name and proximity— Parcel fabric points that lie within the proximity tolerance and have the same name as the source points will be matched to the source points and updated.</bullet_item><para/>
        ///     <bullet_item>Global ID and proximity—Parcel fabric points that lie within the proximity tolerance and have the same Global ID as the source points will be matched to the source points and updated. Global IDs are stored in the Global ID field of the parcel fabric points feature class and in the specified Global ID field of the source feature class.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将用于查找与源点匹配的宗地结构点的方法。</para>
        ///   <bulletList>
        ///     <bullet_item>邻近性—位于源点邻近容差范围内的宗地结构点将与源点匹配并更新。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>名称和邻近度 - 位于邻近容差范围内且与源点同名的宗地结构点将与源点匹配并更新。</bullet_item><para/>
        ///     <bullet_item>全局 ID 和邻近度 - 位于邻近容差范围内且与源点具有相同全局 ID 的宗地结构点将与源点匹配并更新。全局 ID 存储在宗地结构点要素类的全局 ID 字段和源要素类的指定全局 ID 字段中。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        /// <param name="_search_distance">
        /// <para>Search Distance</para>
        /// <para>The distance that will be used to search for parcel fabric points that lie within the proximity of source points. If a parcel fabric point is found within the search distance of a source point, the points will be matched and the parcel fabric point will be updated.</para>
        /// <para>将用于搜索位于源点附近的宗地结构点的距离。如果在源点的搜索距离内找到宗地结构点，则将匹配这些点并更新宗地结构点。</para>
        /// </param>
        /// <param name="_update_type">
        /// <para>Update Type</para>
        /// <para><xdoc>
        ///   <para>Specifies the type of update that will be applied to parcel fabric points that match source points.</para>
        ///   <bulletList>
        ///     <bullet_item>All—The geometry (x,y,z) and matching attribute fields of parcel fabric points will be updated. If the geometry of parcel fabric points are updated, coincident parcel features are updated as well. This is the default.</bullet_item><para/>
        ///     <bullet_item>Geometry (x,y,z)— Only the geometry (x,y,z) of the parcel fabric points will be updated. Coincident parcel features will be updated as well.</bullet_item><para/>
        ///     <bullet_item>Retire and replace—Source points will be imported as new parcel fabric points. Any matching parcel fabric points will be retired as historic. The Retired By Record field of each matching parcel fabric point will be populated with the GlobalID of the record specified in the Record Name parameter.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将应用于与源点匹配的宗地结构点的更新类型。</para>
        ///   <bulletList>
        ///     <bullet_item>全部 - 将更新宗地结构点的几何 （x，y，z） 和匹配属性字段。如果宗地结构点的几何更新，则重合宗地要素也会更新。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>几何 （x，y，z）— 仅更新宗地结构点的几何 （x，y，z）。重合宗地要素也将更新。</bullet_item><para/>
        ///     <bullet_item>停用和替换 - 源点将作为新的宗地结构点输入。任何匹配的宗地结构点都将作为历史点停用。每个匹配的宗地结构点的“停用依据”字段将填充“记录名称”参数中指定的记录的 GlobalID。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        public ImportParcelFabricPoints(object _source_points, object _target_parcel_fabric, _match_point_method_value _match_point_method, string _search_distance, _update_type_value _update_type)
        {
            this._source_points = _source_points;
            this._target_parcel_fabric = _target_parcel_fabric;
            this._match_point_method = _match_point_method;
            this._search_distance = _search_distance;
            this._update_type = _update_type;
        }
        public override string ToolboxName => "Parcel Tools";

        public override string ToolName => "Import Parcel Fabric Points";

        public override string CallName => "parcel.ImportParcelFabricPoints";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_source_points, _target_parcel_fabric, _match_point_method.GetGPValue(), _search_distance, _update_type.GetGPValue(), _updated_parcel_fabric, _record_name, _match_field, _conflicts_table];

        /// <summary>
        /// <para>Source Points</para>
        /// <para>The source point feature class that will be used to update points in the target parcel fabric.</para>
        /// <para>将用于更新目标宗地结构中的点的源点要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Source Points")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _source_points { get; set; }


        /// <summary>
        /// <para>Target Parcel Fabric</para>
        /// <para>The target parcel fabric containing the points that will be updated. The target parcel fabric can be from a file geodatabase, an enterprise geodatabase connected to the default version, or a feature service.</para>
        /// <para>包含将要更新的点的目标宗地结构。目标宗地结构可以来自文件地理数据库、连接到默认版本的企业级地理数据库或要素服务。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target Parcel Fabric")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _target_parcel_fabric { get; set; }


        /// <summary>
        /// <para>Match Point Method</para>
        /// <para><xdoc>
        ///   <para>Specifies the method that will be used to find parcel fabric points that match the source points.</para>
        ///   <bulletList>
        ///     <bullet_item>Proximity—Parcel fabric points that lie within the proximity tolerance of the source points will be matched to the source points and updated. This is the default.</bullet_item><para/>
        ///     <bullet_item>Name and proximity— Parcel fabric points that lie within the proximity tolerance and have the same name as the source points will be matched to the source points and updated.</bullet_item><para/>
        ///     <bullet_item>Global ID and proximity—Parcel fabric points that lie within the proximity tolerance and have the same Global ID as the source points will be matched to the source points and updated. Global IDs are stored in the Global ID field of the parcel fabric points feature class and in the specified Global ID field of the source feature class.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将用于查找与源点匹配的宗地结构点的方法。</para>
        ///   <bulletList>
        ///     <bullet_item>邻近性—位于源点邻近容差范围内的宗地结构点将与源点匹配并更新。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>名称和邻近度 - 位于邻近容差范围内且与源点同名的宗地结构点将与源点匹配并更新。</bullet_item><para/>
        ///     <bullet_item>全局 ID 和邻近度 - 位于邻近容差范围内且与源点具有相同全局 ID 的宗地结构点将与源点匹配并更新。全局 ID 存储在宗地结构点要素类的全局 ID 字段和源要素类的指定全局 ID 字段中。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Match Point Method")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _match_point_method_value _match_point_method { get; set; }

        public enum _match_point_method_value
        {
            /// <summary>
            /// <para>Proximity</para>
            /// <para>Proximity—Parcel fabric points that lie within the proximity tolerance of the source points will be matched to the source points and updated. This is the default.</para>
            /// <para>邻近性—位于源点邻近容差范围内的宗地结构点将与源点匹配并更新。这是默认设置。</para>
            /// </summary>
            [Description("Proximity")]
            [GPEnumValue("PROXIMITY")]
            _PROXIMITY,

            /// <summary>
            /// <para>Name and proximity</para>
            /// <para>Name and proximity— Parcel fabric points that lie within the proximity tolerance and have the same name as the source points will be matched to the source points and updated.</para>
            /// <para>名称和邻近度 - 位于邻近容差范围内且与源点同名的宗地结构点将与源点匹配并更新。</para>
            /// </summary>
            [Description("Name and proximity")]
            [GPEnumValue("NAME_AND_PROXIMITY")]
            _NAME_AND_PROXIMITY,

            /// <summary>
            /// <para>Global ID and proximity</para>
            /// <para>Global ID and proximity—Parcel fabric points that lie within the proximity tolerance and have the same Global ID as the source points will be matched to the source points and updated. Global IDs are stored in the Global ID field of the parcel fabric points feature class and in the specified Global ID field of the source feature class.</para>
            /// <para>全局 ID 和邻近度 - 位于邻近容差范围内且与源点具有相同全局 ID 的宗地结构点将与源点匹配并更新。全局 ID 存储在宗地结构点要素类的全局 ID 字段和源要素类的指定全局 ID 字段中。</para>
            /// </summary>
            [Description("Global ID and proximity")]
            [GPEnumValue("GLOBALID_AND_PROXIMITY")]
            _GLOBALID_AND_PROXIMITY,

        }

        /// <summary>
        /// <para>Search Distance</para>
        /// <para>The distance that will be used to search for parcel fabric points that lie within the proximity of source points. If a parcel fabric point is found within the search distance of a source point, the points will be matched and the parcel fabric point will be updated.</para>
        /// <para>将用于搜索位于源点附近的宗地结构点的距离。如果在源点的搜索距离内找到宗地结构点，则将匹配这些点并更新宗地结构点。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Search Distance")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public string _search_distance { get; set; }


        /// <summary>
        /// <para>Update Type</para>
        /// <para><xdoc>
        ///   <para>Specifies the type of update that will be applied to parcel fabric points that match source points.</para>
        ///   <bulletList>
        ///     <bullet_item>All—The geometry (x,y,z) and matching attribute fields of parcel fabric points will be updated. If the geometry of parcel fabric points are updated, coincident parcel features are updated as well. This is the default.</bullet_item><para/>
        ///     <bullet_item>Geometry (x,y,z)— Only the geometry (x,y,z) of the parcel fabric points will be updated. Coincident parcel features will be updated as well.</bullet_item><para/>
        ///     <bullet_item>Retire and replace—Source points will be imported as new parcel fabric points. Any matching parcel fabric points will be retired as historic. The Retired By Record field of each matching parcel fabric point will be populated with the GlobalID of the record specified in the Record Name parameter.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将应用于与源点匹配的宗地结构点的更新类型。</para>
        ///   <bulletList>
        ///     <bullet_item>全部 - 将更新宗地结构点的几何 （x，y，z） 和匹配属性字段。如果宗地结构点的几何更新，则重合宗地要素也会更新。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>几何 （x，y，z）— 仅更新宗地结构点的几何 （x，y，z）。重合宗地要素也将更新。</bullet_item><para/>
        ///     <bullet_item>停用和替换 - 源点将作为新的宗地结构点输入。任何匹配的宗地结构点都将作为历史点停用。每个匹配的宗地结构点的“停用依据”字段将填充“记录名称”参数中指定的记录的 GlobalID。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Update Type")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _update_type_value _update_type { get; set; }

        public enum _update_type_value
        {
            /// <summary>
            /// <para>All</para>
            /// <para>All—The geometry (x,y,z) and matching attribute fields of parcel fabric points will be updated. If the geometry of parcel fabric points are updated, coincident parcel features are updated as well. This is the default.</para>
            /// <para>全部 - 将更新宗地结构点的几何 （x，y，z） 和匹配属性字段。如果宗地结构点的几何更新，则重合宗地要素也会更新。这是默认设置。</para>
            /// </summary>
            [Description("All")]
            [GPEnumValue("ALL")]
            _ALL,

            /// <summary>
            /// <para>Geometry (x,y,z)</para>
            /// <para>Geometry (x,y,z)— Only the geometry (x,y,z) of the parcel fabric points will be updated. Coincident parcel features will be updated as well.</para>
            /// <para>几何 （x，y，z）— 仅更新宗地结构点的几何 （x，y，z）。重合宗地要素也将更新。</para>
            /// </summary>
            [Description("Geometry (x,y,z)")]
            [GPEnumValue("GEOMETRY_XYZ")]
            _GEOMETRY_XYZ,

            /// <summary>
            /// <para>Retire and replace</para>
            /// <para>Retire and replace—Source points will be imported as new parcel fabric points. Any matching parcel fabric points will be retired as historic. The Retired By Record field of each matching parcel fabric point will be populated with the GlobalID of the record specified in the Record Name parameter.</para>
            /// <para>停用和替换 - 源点将作为新的宗地结构点输入。任何匹配的宗地结构点都将作为历史点停用。每个匹配的宗地结构点的“停用依据”字段将填充“记录名称”参数中指定的记录的 GlobalID。</para>
            /// </summary>
            [Description("Retire and replace")]
            [GPEnumValue("RETIRE_AND_REPLACE")]
            _RETIRE_AND_REPLACE,

        }

        /// <summary>
        /// <para>Updated Parcel Fabric</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Parcel Fabric")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_parcel_fabric { get; set; }


        /// <summary>
        /// <para>Record Name</para>
        /// <para><xdoc>
        ///   <para>The name of the record that will be associated with the new imported points.</para>
        ///   <para>If the record already exists in the target parcel fabric, the new points are associated with the record. If the record does not exist, a record will be created. If new points replace existing points, and Update Type is set to Retire and replace (update_type = RETIRE_AND_REPLACE in Python), the record will be used to retire the points as historic.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将与新导入的点关联的记录的名称。</para>
        ///   <para>如果目标宗地结构中已存在记录，则新点将与该记录相关联。如果该记录不存在，则将创建一个记录。如果新点替换现有点，并且“更新类型”设置为“停用并替换”（Python 中的update_type = RETIRE_AND_REPLACE），则该记录将用于将点作为历史点停用。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Record Name")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _record_name { get; set; } = null;


        /// <summary>
        /// <para>Match Field</para>
        /// <para>The field that will be used to match source points to parcel fabric points when Name and proximity (NAME_AND_PROXIMITY in Python) or Global ID and proximity (GLOBALID_AND_PROXIMITY in Python) is used for the Match Point Method (match_point_method in Python) parameter. When searching by name, the field in the source point feature class should be of type Text. When searching by Global ID, the field in the source point feature class should be of type GUID.</para>
        /// <para>当“名称和邻近性”（在 Python 中为 NAME_AND_PROXIMITY）或全局 ID 和邻近性（在 Python 中为 GLOBALID_AND_PROXIMITY）用于匹配点方法（在 Python 中为 match_point_method）参数时，将用于将源点与宗地结构点进行匹配的字段。按名称搜索时，源点要素类中的字段应为文本类型。按全局 ID 搜索时，源点要素类中的字段应为 GUID 类型。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Match Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _match_field { get; set; } = null;


        /// <summary>
        /// <para>Conflicts Table</para>
        /// <para>The path and name of the output table that will store conflicts. If more than one parcel fabric point is found within the search tolerance of a source point, the object IDs of the source points and parcel fabric points will be reported in the conflicts table.</para>
        /// <para>将存储冲突的输出表的路径和名称。如果在源点的搜索容差范围内找到多个宗地结构点，则源点和宗地结构点的对象 ID 将在冲突表中报告。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Conflicts Table")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _conflicts_table { get; set; } = null;


        public ImportParcelFabricPoints SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}